/**
 * Copyright 2010 Pavel Daniel Alexandru PFA
 * 
 * Licensed under the terms of the GNU Lesser General Public License version 3 
 * as published by the Free Software Foundation. You may obtain a copy of the
 * License at: http://www.gnu.org/copyleft/lesser.html
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations 
 * under the License. 
 */
package com.kobol.webclient.client.gin;

import com.google.gwt.inject.client.AsyncProvider;
import com.google.gwt.inject.client.GinModules;
import com.google.gwt.inject.client.Ginjector;
import com.google.inject.Provider;
import com.gwtplatform.dispatch.client.gin.DispatchAsyncModule;
import com.gwtplatform.mvp.client.EventBus;
import com.gwtplatform.mvp.client.proxy.PlaceManager;
import com.gwtplatform.mvp.client.proxy.ProxyFailureHandler;
import com.kobol.webclient.client.main.presenter.MainPagePresenter;
import com.kobol.webclient.client.main.presenter.MainPageSmartGwtPresenter;
import com.kobol.webclient.client.resourcecenter.presenter.HighlightsPresenter;
import com.kobol.webclient.client.sales.presenter.AccountsPresenter;
import com.kobol.webclient.client.sales.presenter.ActivitiesPresenter;
import com.kobol.webclient.client.sales.presenter.CalendarPresenter;
import com.kobol.webclient.client.settings.presenter.AdministrationPresenter;
import com.kobol.webclient.client.signin.presenter.ErrorPagePresenter;
import com.kobol.webclient.client.signin.presenter.SignInPagePresenter;

/**
 * @author Pavel Alexandru
 * 
 */
@GinModules({ DispatchAsyncModule.class, ClientModule.class })
public interface WebclientGinjector extends Ginjector {

    EventBus getEventBus();

    PlaceManager getPlaceManager();

    // Sign In
    Provider<SignInPagePresenter> getSignInPagePresenter();

    // Main Pages
    AsyncProvider<MainPagePresenter> getMainPagePresenter();

    AsyncProvider<MainPageSmartGwtPresenter> getMainPageSmartGwtPresenter();

    // Error Page
    AsyncProvider<ErrorPagePresenter> getErrorPagePresenter();

    // Sales
    AsyncProvider<ActivitiesPresenter> getActivitiesPresenter();

    AsyncProvider<CalendarPresenter> getCalendarPresenter();

    AsyncProvider<AccountsPresenter> getAccountsPresenter();

    // Settings
    AsyncProvider<AdministrationPresenter> getAdministrationPresenter();

    // Resource Centre
    AsyncProvider<HighlightsPresenter> getHighlightsPresenter();

    ProxyFailureHandler getProxyFailureHandler();
}